import jwt from 'jsonwebtoken';

// 验证 JWT 令牌的中间件
export const authenticateToken = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).json({ 
      success: false,
      message: '未提供访问令牌' 
    });
  }

  try {
    const user = jwt.verify(token, process.env.JWT_SECRET);
    req.user = user;
    next();
  } catch (error) {
    console.error('Token verification error:', error);
    return res.status(403).json({ 
      success: false,
      message: '访问令牌无效或已过期' 
    });
  }
};

// 可选的 JWT 验证中间件，不要求必须登录
export const optionalAuthenticateToken = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    req.user = null;
    return next();
  }

  try {
    const user = jwt.verify(token, process.env.JWT_SECRET);
    req.user = user;
  } catch (error) {
    req.user = null;
  }
  
  next();
};

// 验证管理员权限的中间件
export const authenticateAdmin = (req, res, next) => {
  // 先验证令牌
  authenticateToken(req, res, () => {
    // 检查用户是否为管理员
    if (req.user && req.user.role === 'admin') {
      next();
    } else {
      res.status(403).json({ 
        success: false,
        message: '需要管理员权限' 
      });
    }
  });
};

// 管理员API身份验证中间件 - 仅验证令牌有效性
export const authenticate = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];

  if (!token) {
    return res.status(401).json({ message: '未提供访问令牌' });
  }

  try {
    const user = jwt.verify(token, process.env.JWT_SECRET);
    req.user = user;
    next();
  } catch (error) {
    console.error('Token verification error:', error);
    return res.status(403).json({ message: '访问令牌无效或已过期' });
  }
}; 